Syndrome processing unit for multibyte error correcting systems

ABSTRACT

A syndrome processing unit for a multibyte error correcting system is disclosed in which logical circuitry for performing product operation on selected pairs of 8-bit syndrome bytes and exclusive-OR operations on selected results of the product operations are selectively combined to define usable cofactors that correspond to coefficients of an error locator polynomial corresponding to a selected codeword if the codeword contains less than the maximum number of errors for which the system has been designed.

BACKGROUND OF THE INVENTION

1. Field of Invention

This invention relates in general to error correcting systems employingcyclic error correcting codes and, in particular, to an improved methodand apparatus for processing syndrome bytes in a multibyte errorcorrecting system.

2. Cross-Referenced Application

Application Ser. No. 454,393, filed concurrently herewith, entitled"On-the-Fly Multibyte Error Correcting System", A. M. Patel, assigned tothe assignee of the present invention, discloses a on-the-fly multibyteerror correcting system.

3. Description of the Prior Art

The use of cyclic error correcting codes in connection with the storageof data in magnetic storage devices is well established in the prior artand is generally recognized as a very efficient and cost effectiveaddition to the storage system.

Generally, the error correcting process involves the processing ofsyndrome bytes to determine the location and pattern of each error thatis detected. Syndrome bytes result from the exclusive-ORing of ECC writecheck characters that are generated as data is being written on thestorage medium and ECC read check characters that are generated when thedata is transferred from or read from storage. The number of ECC checkcharacters employed depends on the desired power of the code and thenumber of data bytes to be checked or protected. As an example, in manypresent day ECC systems which are used in connection with the storage of8-bit bytes in a magnetic storage device, two check bytes are used foreach error to be checked in a codeword having a length of 255 bytepositions. Thus, for example, six check bytes are required to detect upto three errors in a block of data having 249 data bytes and six checkbytes. Thus, six distinctive syndrome bytes are generated in such asystem. If there are no errors in the data word comprising the 255 bytesread from storage, then all six syndrome bytes each contain an all zeropattern. Under such a condition, no syndrome processing is required andthe data word may be sent to the central processing unit. However, ifone or more of the syndrome bytes is non-zero, then syndrome processinginvolves the process of identifying the location of the bytes in errorand further identifying the error pattern for each error location.

The prior art has disclosed in various publications and patents theunderlying mathematical concepts and operations which are involved innormal syndrome processing operations. These operations and mathematicalexplanations generally involve first identifying the location of theerrors by use of what has been referred to by Peterson as the "errorlocator polynomial". The overall objective of the mathematics involvedemploying the error locator polynomial is to define the locations of thebytes in error by using only the syndrome bytes that are generated inthe system.

The prior art has employed the error locator polynomial as the start ofthe mathematical analysis to express error locations in terms ofsyndromes so that binary logic may be employed to decode the syndromebytes into first identifying the locations in error so that subsequenthardware can identify the error patterns in each location. Two problemshave existed with the error locator portion of prior art syndromeprocessing decoders for multi-error correcting systems.

The first problem is that separate sets of logic were required for eachof the multi-error conditions. For example, if the system was designedto correct up to three errors, three separate and independent sets oflogic were required to identify the error location. That is, the logicrequired to identify the error locations when there were three errorscould not be used to identify the locations if there were less thanthree errors, i.e., two or a single error. Likewise, the logic designedto identify the error locations if two errors were present could notidentify the error location if only one error existed in the codeword.The cost of such prior art decoders was, therefore, quite high.

The second problem with prior art syndrome processing decoders formultibyte error correcting systems is that a division step was requiredin the mathematical processing of the syndrome bytes to arrive at errorlocations. It is well recognized that a division operation in higherorder binary fields is costly, both in time and hardware implementation.

The present invention provides a decoder for syndrome processing in amultibyte error correcting system which is capable of identifying eacherror location in a manner which avoids using a division operation andwhich employs a subset of the hardware used for identifying the maximumnumber of error locations in the system where the number of errors isless than maximum.

SUMMARY OF THE INVENTION

In accordance with the present invention, a method and apparatus isdisclosed in which syndrome bytes are used to develop the appropriatevalues of the coefficients of the error locator equation ##EQU1## which,when rewritten for a specific representative case such as a three byteerror correction system, takes the following form:

    Δ.sub.3 α.sup.3i +Δ.sub.2 α.sup.2i +Δ.sub.1 α.sup.i +Δ.sub.0 =0 for iε{I}         (2)

The method involves generating the coefficients by performing productoperations and sum operations on the appropriate syndromes in GF(2⁸)element algebra to develop a set of location parameters corresponding tothe selected determinants in the following matrix equation: ##EQU2##where the symbols σ₃, σ₂, σ₁ and σ₀ represent the coefficients of theprior art error locator polynomial.

The expressions for the location parameters are formulated such thatcofactors for less than the maximum number of errors are developed inthe process of developing the parameters for the maximum number oferrors which simplifies the computation and selection of thecoefficients of the error locator equation (2). The parameters and thecorresponding cofactors for the three error code are developed inaccordance with the following four equations:

    Δ.sub.33 =S.sub.2 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.3 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.4 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (4)

    Δ.sub.32 S.sub.3 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.4 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.5 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (5)

    Δ.sub.31 =S.sub.0 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.1 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.1)⊕S.sub.2 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (6)

    Δ.sub.30 =S.sub.1 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.3 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (7)

It is, therefore, an object of the present invention to provide animproved decoder for an error correcting system involving multibyteerrors in which only one set of combinatorial logic is employed foridentifying the error locations for the various error conditions.

A further object of the present invention is to provide an improveddecoder for an error correcting system capable of correcting multipleerrors in which coefficients of the error locator polynomial employed toidentify error locations is developed without the use of any divisionoperations.

The foregoing and other objects, features and advantages of theinvention will be apparent from the following more particulardescription of a preferred embodiment of the invention as illustrated inthe accompanying drawing.

BRIEF DESCRIPTION OF THE DRAWING

FIG. 1 is a system block diagram of an on-the-fly three-byte errorcorrecting system;

FIG. 2 is a schematic illustration of the combinatorial logic employedin the decoder for the computation of location parameters in the systemshown in FIG. 1;

FIG. 3 is a schematic illustration of the combinatorial logic involvedobtaining the coefficients Δ_(m) in the decoder of FIG. 1 by identifyingthe exact number of errors and selecting appropriate location parameterswhen less than three errors are found in the codeword.

DESCRIPTION OF THE PREFERRED EMBODIMENT

A description of the system shown in FIG. 1 will first be provided. Thedescription of the syndrome processing hardware for identifying errorlocations and the method of operating the hardware will then be followedby a mathematical explanation and proof of the manner in which thedecoder has been implemented. This explanation will disclose inmathematical terms how a decoder can be constructed to operate in anerror correcting system for any number of errors.

FIG. 1 shows the block diagram of an on-the-fly decoder which isdisclosed and claimed in the copending application Ser. No. 454,393,filed concurrently herewith and assigned to the assignee of the presentinvention. As described in that application, the decoding process iscontinuous in an uninterrupted stream of data entering in the form of achain of n-symbol codewords, hence the name, on-the-fly decoding. From apractical viewpoint, a given decoding process can be consideredon-the-fly if it meets the following test, namely, the corrected databytes of a previously received codeword are delivered to the user systemwhile the data bytes of the following codeword are being received.

The decoder comprising blocks 6, 7, 8, 9 computes syndromes for theincoming codeword as it decodes and corrects errors in the previouslyreceived outgoing codeword. Each clock cycle corresponds to an input ofone data symbol of the incoming codeword concurrent with an output ofone corrected data symbol of the outgoing codeword. A buffer 5 holds atleast n-symbols of the uncorrected data in between the incoming andoutgoing symbols.

A three-error correcting Reed-Solomon Code in GF(2⁸) is used as anexample of special interest for applications in computer products. The256 elements of GF(2⁸) are conventionally represented by the set of8-bit binary vectors. One such representation is given in Table 1. In athree-error correcting Reed-Solomon code, there are six check symbolscorresponding to the roots α⁰, α¹, α², α³, α⁴, α⁵ of the generatorpolynomial where α is an element of a finite field GF(2⁸) represented byan 8-bit binary vector.

                                      TABLE 1                                     __________________________________________________________________________    1 1 0 1 0 1 0 0 1                                                             GF256 P                                                                       __________________________________________________________________________    000                                                                              00000001                                                                           051                                                                              11011100                                                                           102                                                                              00101010                                                                           153                                                                              11101100                                                                           204                                                                              00011011                                   001                                                                              00000010                                                                           052                                                                              00010001                                                                           103                                                                              01010100                                                                           154                                                                              01110001                                                                           205                                                                              00110110                                   002                                                                              00000100                                                                           053                                                                              00100010                                                                           104                                                                              10101000                                                                           155                                                                              11100010                                                                           206                                                                              01101100                                   003                                                                              00001000                                                                           054                                                                              01000100                                                                           105                                                                              11111001                                                                           156                                                                              01101101                                                                           207                                                                              11011000                                   004                                                                              00010000                                                                           055                                                                              10001000                                                                           106                                                                              01011011                                                                           157                                                                              11011010                                                                           208                                                                              00011001                                   005                                                                              00100000                                                                           056                                                                              10111001                                                                           107                                                                              10110110                                                                           158                                                                              00011101                                                                           209                                                                              00110010                                   006                                                                              01000000                                                                           057                                                                              11011011                                                                           108                                                                              11000101                                                                           159                                                                              00111010                                                                           210                                                                              01100100                                   007                                                                              10000000                                                                           058                                                                              00011111                                                                           109                                                                              00100011                                                                           160                                                                              01110100                                                                           211                                                                              11001000                                   008                                                                              10101001                                                                           059                                                                              00111110                                                                           110                                                                              01000110                                                                           161                                                                              11101000                                                                           212                                                                              00111001                                   009                                                                              11111011                                                                           060                                                                              01111100                                                                           111                                                                              10001100                                                                           162                                                                              01111001                                                                           213                                                                              01110010                                   010                                                                              01011111                                                                           061                                                                              11111000                                                                           112                                                                              10110001                                                                           163                                                                              11110010                                                                           214                                                                              11100100                                   011                                                                              10111110                                                                           062                                                                              01011001                                                                           113                                                                              11001011                                                                           164                                                                              01001101                                                                           215                                                                              01100001                                   012                                                                              11010101                                                                           063                                                                              10110010                                                                           114                                                                              00111111                                                                           165                                                                              10011010                                                                           216                                                                              11000010                                   013                                                                              00000011                                                                           064                                                                              11001101                                                                           115                                                                              01111110                                                                           166                                                                              10011101                                                                           217                                                                              00101101                                   014                                                                              00000110                                                                           065                                                                              00110011                                                                           116                                                                              11111100                                                                           167                                                                              10010011                                                                           218                                                                              01011010                                   015                                                                              00001100                                                                           066                                                                              01100110                                                                           117                                                                              01010001                                                                           168                                                                              10001111                                                                           219                                                                              10110100                                   016                                                                              00011000                                                                           067                                                                              11001100                                                                           118                                                                              10100010                                                                           169                                                                              10110111                                                                           220                                                                              11000001                                   017                                                                              00110000                                                                           068                                                                              00110001                                                                           119                                                                              11101101                                                                           170                                                                              11000111                                                                           221                                                                              00101011                                   018                                                                              01100000                                                                           069                                                                              01100010                                                                           120                                                                              01110011                                                                           171                                                                              00100111                                                                           222                                                                              01010110                                   019                                                                              11000000                                                                           070                                                                              11000100                                                                           121                                                                              11100110                                                                           172                                                                              01001110                                                                           223                                                                              10101100                                   020                                                                              00101001                                                                           071                                                                              00100001                                                                           122                                                                              01100101                                                                           173                                                                              10011100                                                                           224                                                                              11110001                                   021                                                                              01010010                                                                           072                                                                              01000010                                                                           123                                                                              11001010                                                                           174                                                                              10010001                                                                           225                                                                              01001011                                   022                                                                              10100100                                                                           073                                                                              10000100                                                                           124                                                                              00111101                                                                           175                                                                              10001011                                                                           226                                                                              10010110                                   023                                                                              11100001                                                                           074                                                                              10100001                                                                           125                                                                              01111010                                                                           176                                                                              10111111                                                                           227                                                                              10000101                                   024                                                                              01101011                                                                           075                                                                              11101011                                                                           126                                                                              11110100                                                                           177                                                                              11010111                                                                           228                                                                              10100011                                   025                                                                              11010110                                                                           076                                                                              01111111                                                                           127                                                                              01000001                                                                           178                                                                              00000111                                                                           229                                                                              11101111                                   026                                                                              00000101                                                                           077                                                                              11111110                                                                           128                                                                              10000010                                                                           179                                                                              00001110                                                                           230                                                                              01110111                                   027                                                                              00001010                                                                           078                                                                              01010101                                                                           129                                                                              10101101                                                                           180                                                                              00011100                                                                           231                                                                              11101110                                   028                                                                              00010100                                                                           079                                                                              10101010                                                                           130                                                                              11110011                                                                           181                                                                              00111000                                                                           232                                                                              01110101                                   029                                                                              00101000                                                                           080                                                                              11111101                                                                           131                                                                              01001111                                                                           182                                                                              01110000                                                                           233                                                                              11101010                                   030                                                                              01010000                                                                           081                                                                              01010011                                                                           132                                                                              10011110                                                                           183                                                                              11100000                                                                           234                                                                              01111101                                   031                                                                              10100000                                                                           082                                                                              10100110                                                                           133                                                                              10010101                                                                           184                                                                              01101001                                                                           235                                                                              11111010                                   032                                                                              11101001                                                                           083                                                                              11100101                                                                           134                                                                              10000011                                                                           185                                                                              11010010                                                                           236                                                                              01011101                                   033                                                                              01111011                                                                           084                                                                              01100011                                                                           135                                                                              10101111                                                                           186                                                                              00001101                                                                           237                                                                              10111010                                   034                                                                              11110110                                                                           085                                                                              11000110                                                                           136                                                                              11110111                                                                           187                                                                              00011010                                                                           238                                                                              11011101                                   035                                                                              01000101                                                                           086                                                                              00100101                                                                           137                                                                              01000111                                                                           188                                                                              00110100                                                                           239                                                                              00010011                                   036                                                                              10001010                                                                           087                                                                              01001010                                                                           138                                                                              10001110                                                                           189                                                                              01101000                                                                           240                                                                              00100110                                   037                                                                              10111101                                                                           088                                                                              10010100                                                                           139                                                                              10110101                                                                           190                                                                              11010000                                                                           241                                                                              01001100                                   038                                                                              11010011                                                                           089                                                                              10000001                                                                           140                                                                              11000011                                                                           191                                                                              00001001                                                                           242                                                                              10011000                                   039                                                                              00001111                                                                           090                                                                              10101011                                                                           141                                                                              00101111                                                                           192                                                                              00010010                                                                           243                                                                              10011001                                   040                                                                              00011110                                                                           091                                                                              11111111                                                                           142                                                                              01011110                                                                           193                                                                              00100100                                                                           244                                                                              10011011                                   041                                                                              00111100                                                                           092                                                                              01010111                                                                           143                                                                              10111100                                                                           194                                                                              01001000                                                                           245                                                                              10011111                                   042                                                                              01111000                                                                           093                                                                              10101110                                                                           144                                                                              11010001                                                                           195                                                                              10010000                                                                           246                                                                              10010111                                   043                                                                              11110000                                                                           094                                                                              11110101                                                                           145                                                                              00001011                                                                           196                                                                              10001001                                                                           247                                                                              10000111                                   044                                                                              01001001                                                                           095                                                                              01000011                                                                           146                                                                              00010110                                                                           197                                                                              10111011                                                                           248                                                                              10100111                                   045                                                                              10010010                                                                           096                                                                              10000110                                                                           147                                                                              00101100                                                                           198                                                                              11011111                                                                           249                                                                              11100111                                   046                                                                              10001101                                                                           097                                                                              10100101                                                                           148                                                                              01011000                                                                           199                                                                              00010111                                                                           250                                                                              01100111                                   047                                                                              10110011                                                                           098                                                                              11100011                                                                           149                                                                              10110000                                                                           200                                                                              00101110                                                                           251                                                                              11001110                                   048                                                                              11001111                                                                           099                                                                              01101111                                                                           150                                                                              11001001                                                                           201                                                                              01011100                                                                           252                                                                              00110101                                   049                                                                              00110111                                                                           100                                                                              11011110                                                                           151                                                                              00111011                                                                           202                                                                              10111000                                                                           253                                                                              01101010                                   050                                                                              01101110                                                                           101                                                                              00010101                                                                           152                                                                              01110110                                                                           203                                                                              11011001                                                                           254                                                                              11010100                                   __________________________________________________________________________

The corresponding syndromes computed by block 6 are denoted by S₀, S₁,S₂, S₃, S₄, and S₅ respectively. These syndromes are computed from thereceived codeword in the conventional manner in accordance with anyknown prior art process. The implementation for this step is well knownand makes use of exclusive-OR circuits and shift registers. The detailsof the block 7 logic circuits are shown in FIGS. 2 and 3.

The overall function of the block 7 shown in FIGS. 2 and 3 is first toimplement the following four equations to develop the locator parametersΔ₃₃, Δ₃₂, Δ₃₁ and Δ₃₀, which also includes the parameters Δ₂₂, Δ₂₁ andΔ₂₀, and then from these locator parameters, select the coefficients Δ₃,Δ₂, Δ₁ and Δ₀ by the logic shown in FIG. 3 in accordance with the exactnumber of errors that are involved in the particular codeword. Theequations for Δ₃₃, Δ₃₂, Δ₃₁ and Δ₃₀ are as follows:

    Δ.sub.33 =S.sub.2 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.3 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.4 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (4)

    Δ.sub.32 =S.sub.3 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.4 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.5 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (5)

    Δ.sub.31 =S.sub.0 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.1 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (6)

    Δ.sub.30 =S.sub.1 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.3 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (7)

These parameters are used to determine the coefficients of the errorlocator equation (2). The error locations and error patterns can then bedetermined by the blocks 8 and 9 of the "on-the-fly" system shown inFIG. 1 and described in the cross-referenced application or the errorsmay be corrected in accordance with other known, more conventional errorcorrecting systems.

The combinatorial logic shown in FIG. 2 includes two basic logic blocks10 and 11. The first block 10, represented by an X, corresponds to aproduct operation in GF(2⁸) involving two 8-bit binary vectors, whilethe second block 11 represents an exclusive-OR binary logical operation.The operation of block 11 is a simple bit-by-bit exclusive-OR logicalfunction using eight 2-way exclusive-OR gates. The product operation, onthe other hand, represented by block 10 is more complex and involves 76exclusive-OR circuits and 64 AND circuits. The need for the 76, XORcircuits and 64 AND circuits may be seen from the following examplewhich explains the product function of block 10.

The product operation of block 10 involves two 8-bit vectors A and B toproduce a third vector C where

    A=[a.sub.0,a.sub.1,a.sub.2,a.sub.3,a.sub.4,a.sub.5,a.sub.6,a.sub.7 ]

    B=[b.sub.0,b.sub.1,b.sub.2,b.sub.3,b.sub.4,b.sub.5,b.sub.6,b.sub.7 ]

    C=[c.sub.0,c.sub.1,c.sub.2,c.sub.3,c.sub.4,c.sub.5,c.sub.6,c.sub.7 ]

The product is obtained through a two step process. First, compute thecoefficients f_(i) of the product polynomial F where F=A×B, modulo 2.Computation of the coefficients f_(i) (i=0, . . . 14) requires 64 ANDgates and 49 EX-OR gates: ##EQU3##

Second, reduce the polynomial F, modulo p(x), where p(x) is a primitivebinary polynomial of degree 8. Use p(x)=1+x³ +x⁵ +x⁷ +x⁸. The reductionof f_(i) modulo p(x) requires at the most 22 EX-OR gates.

    C.sub.0 =f.sub.0 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.12 ⊕f.sub.13

    C.sub.1 =f.sub.1 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.11 ⊕f.sub.13 ⊕f.sub.14

    C.sub.2 =f.sub.2 ⊕f.sub.10 ⊕f.sub.11 ⊕f.sub.12 ⊕f.sub.14

    C.sub.3 =f.sub.3 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.11

    C.sub.4 =f.sub.4 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.11 ⊕f.sub.12

    C.sub.5 =f.sub.5 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.11

    C.sub.6 =f.sub.6 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.12

    C.sub.7 =f.sub.7 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.11 ⊕f.sub.12

The implementation of the product process involves one 2-input AND-gatefor each product term required for the coefficient f₀ through f₁₄ and a2-input exclusive-OR gate for combining the outputs of the AND-gates.Each block 10, therefore, represents 64 AND-gates, 71 exclusive-ORgates.

The first term of the error locator polynomial S₂ (S₁, S₃ ⊕S₂, S₂) ofthe Δ₃₃ equation is implemented by dashed block 16 in FIG. 2. The outputof block 16 is exclusive-ORed in gate 18 with the second term of theequation and the result exclusive-ORed in gate 19 with the last term ofthe equation.

The blocks involved in developing each of the other determinants Δ₃₂,Δ₃₁ and Δ₃₀ may be traced in a similar manner in FIG. 2.

The parameters Δ₂₂, Δ₂₁ and Δ₂₀ for the two-error case are cofactors inequation (4) for Δ₃₃. These cofactors are:

    Δ.sub.22 =S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0       (8)

    Δ.sub.21 =S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2       (9)

    Δ.sub.20 =S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2       (10)

In FIG. 2, the computations for Δ₂₂, Δ₂₁ and Δ₂₀ are shown as theinterim byproducts within the computations for Δ₃₃. Similarly, Δ₁₁ andΔ₁₀ are cofactors in equation (8) for Δ₂₂ which are given by

    Δ.sub.11 =S.sub.0                                    (11)

    Δ.sub.10 =S.sub.1                                    (12)

It is shown later in the specification how the equations for developinglocator parameters are derived from the following prior art relationshipof the error locator polynomial with the syndromes. ##EQU4##

FIG. 3 illustrates the logic for selecting the coefficients of the errorlocator polynomial from the locator parameters Δ₃₃ through Δ₃₀ andcofactors Δ₂₂ through Δ₁₀. The FIG. 3 logic functions to identify thenumber of errors from the input parameters Δ₃₃ through Δ₃₀ and cofactorsΔ₂₂ through Δ₁₀ and select the appropriate value Δ_(m) in the generalequation ##EQU5## When Δ₃₃ is non-zero, indicating the presence of threeerrors, the coefficients Δ₃ through Δ₀ will assume the input Δ₃₃ throughΔ₃₀. As shown, when Δ₃₃ is non-zero, the output of AND-gate 41 is low,permitting the Δ₃₂, Δ₃₁ and Δ₃₀ to be gated through AND-gates 42, 43 and44 respectively since the output of AND-gate 41 is inverted at the inputto each gate 42-44 to enable each of the above AND-gates.

A similar logic function is achieved by Δ₂₂ if Δ₃₃ is zero indicatingnot more than two errors are present. In such a situation, Δ₂, Δ₁ and Δ₀will take lthe values of Δ₂₂, Δ₂₁ and Δ₂₀ respectively through theoperation of AND-gates 51, 52 and 53 respectively. This functioncorresponds to the syndrome equation for two errors.

The logic circuitry of FIG. 3 functions similarly if Δ₂₂ is also zero tocause Δ₁ and Δ₀ to assume the values of Δ₁₁ and Δ₁₀. AND-gates 61 and 62gate Δ₁₁ and Δ₁₀ respectively through OR-gates 71, 72 if Δ₃₃ and Δ₂₂ areboth zero since AND-gate 60 provides the enabling signal.

The overall logic of FIG. 3, therefore, functions to produce or toselect the correct values of the coefficients Δ₃, Δ₂, Δ₁ and Δ₀ for theerror locator equations from the locator parameters developed by thelogic of FIG. 2.

Although the above is described for a special case of three-errorcorrecting Reed-Solomon code, the decoder for any multiple errorcorrecting cyclic codes, such as BCH codes, can be implemented inaccordance with the above teachings.

The following is the mathematical derivation for the equations used inthe logic implementation of FIGS. 2 and 3.

In the three-error correcting Reed-Solomon Code in GF(2⁸) there are sixcheck symbols corresponding to the roots α⁰, α¹, α², α³, α⁴, α⁵ of thegenerator polynomial. The corresponding syndromes are denoted by S₀, S₁,S₂, S₃, S₄ and S₅ respectively.

We assume that, at the most, three symbols are in error. The errorvalues are denoted by Ei₁, Ei₂ and Ei₃ and the locations of erroneoussymbols are denoted by i₁, i₂ and i₃. Then the relationships between thesyndromes and the errors are given by

    S.sub.j =α.sup.ji.sbsp.1 E.sub.i.sbsb.1 ⊕α.sup.ji.sbsp.2 E.sub.i.sbsb.2 ⊕α.sup.ji.sbsp.3 E.sub.i.sbsb.3 for j=0, 1, 2, 3, 4, 5.                                                     (1A)

Consider the polynomial with roots at α^(i1), α^(i2) and α^(i3). This iscalled error locator polynomial, given by

    (x⊕α.sup.i.sbsp.1)(x⊕α.sup.i.sbsp.2)(x⊕α.sup.i.sbsp.3)=x.sup.3 ⊕σ.sub.2 x.sup.2 ⊕σ.sub.1 x⊕σ.sub.0                                       (2A)

Substituting x=α^(i) in (2A) we get

    α.sup.3i ⊕σ.sub.2 α.sup.2i ⊕σ.sub.1 α.sup.i ⊕σ.sub.0 =0 for i=i.sub.1, i.sub.2 and i.sub.3. (3A)

From equations (1A) and (3A), we can derive the following relationshipbetween the syndromes S_(j) and the coefficients σ_(i) of the errorlocation polynomial. ##EQU6##

We can solve Equation (4A) and obtain σ₀, σ₁ and σ₂ as ##EQU7## whereΔ₃₃, Δ₃₂, Δ₃₁ and Δ₃₀ are given by

    Δ.sub.33 =S.sub.2 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.3 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.4 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (6A)

    Δ.sub.32 =S.sub.3 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.4 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.5 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (7A)

    Δ.sub.31 =S.sub.0 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.1 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (8A)

    Δ.sub.30 =S.sub.1 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.3 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (9A)

If the value of Δ₃₃ is 0, then Equation (4A) is a dependent set whichimplies that there are fewer than three errors. In that case, thesyndromes will be processed for two errors where the parameters Δ₂₂, Δ₂₁and Δ₂₀ are derived from similar equations for the case of two errorsand are given by

    Δ.sub.22 =S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0       (10A)

    Δ.sub.21 =S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2       (11A)

    Δ.sub.20 =S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2       (12A)

Note that these are cofactors of Δ₃₃ as seen from Equation (6A) whichcan be rewritten as

    Δ.sub.33 =S.sub.2 Δ.sub.20 ⊕S.sub.3 Δ.sub.21 ⊕S.sub.4 Δ.sub.22                               (13A)

Thus, the values Δ₂₂, Δ₂₁ and Δ₂₀ for the case of two errors need not becomputed separately. They are available as byproducts of the computationfor Δ₃₃. Similarly, Δ₁₁ and Δ₁₀ for the case of one error are given by

    Δ.sub.11 =S.sub.0                                    (14A)

    Δ.sub.10 =S.sub.1                                    (15A)

which are cofactors of Δ₂₂ and are also readily available as syndromes.

Let v denote the exact number of errors, which may be 3, 2, 1 or 0.

The exact number of errors is determined as follows:

    v=3 if Δ.sub.33 ≠0

    v=2 if Δ.sub.33 =0 and Δ.sub.22 ≠0

    v=1 if Δ.sub.33 =Δ.sub.22 =0 and Δ.sub.11 ≠0

    v=0 if Δ.sub.33 =66.sub.22 =66.sub.11 =0             (16A)

The special cases of two and one errors can be accomodated automaticallyby selecting appropriate determinants. To this end, let Δ₃, Δ₂, Δ₁ andΔ₀ be defined as ##EQU8## Then equation (5A) can be rewritten as##EQU9## Conventionally, the error locator polynomial (3A) with thecoefficients τ₀, τ₁ and τ₂ of equation (21A) is used to determine errorlocations through the well known Chien search procedure. However, theerror locator equation can be modified in order to avoid the division byΔ_(v). The modified error locator equation is given as

    Δ.sub.3 α.sup.3i +Δ.sub.2 α.sup.2i +Δ.sub.1 α.sup.i +Δ.sub.0 =0                           (22A)

The error location numbers are the set of v unique values of i whichsatisfy Equation (22A).

The General Case of t Errors

The following is the mathematical derivation for the general case toestablish that the logic set forth in FIGS. 2 and 3 for the special caseof up to three errors is applicable in general for t errors.

In a general BCH or Reed-Solomon code, the codeword consists ofn-symbols which include r check symbols corresponding to the rootsα^(a), α¹⁺¹, α^(a+2), . . . , α^(a+r-1) of the generator polynomialwhere α is an element of the Galois field GF(256). The integer a will betaken to be zero, although all of the following results can be derivedwith any value of a. The corresponding syndromes are denoted by S₀, S₁,S₂, . . . , S_(r-1) respectively. The syndromes can be computed from thereceived codeword as ##EQU10## where B₀, B₁, B₂, . . . , B_(n-1) are then-symbols of the received codeword.

Let v denote the actual number of symbols in error in a given codeword.The error values are denoted by E_(i) where i represents an errorlocation value from a set of v different error locations given by{I}={i₁, i₂, . . . , i_(v) }. The relationship between syndromes and theerrors are then given by ##EQU11## Any non-zero value of a syndromeindicates the presence of errors. The decoder processes these syndromesin order to determine the locations and values of the errors. Let tdenote the maximum number of errors that can be decoded withoutambiguity. A set of r=2t syndromes are required to determine thelocations and values of t errors.

Consider the polynomial with roots at α^(i) where iε{I}. This is calledthe error locator polynomial defined as ##EQU12## where τ₀ =1, τ_(v) ≠0and for m>v, τ_(m) =0. The unknown coefficients τ_(m) for m≦v can bedetermined from the syndromes of Equation 1B as shown below.

Substituting x=α^(i) in Equation 3B we get ##EQU13## Using Equations 2Band 4B, it is easy to show that the syndromes S_(j) and the coefficientsτ_(m) of the error locator polynomial satisfies the following set ofrelationships: ##EQU14## The set of equations 5B can be rewritten inmatrix notation as ##EQU15## Let M denote the tx(t+1) syndrome matrix onleft side of Equation 6B. Let M_(t) denote the square matrix obtained byeliminating the last column in matrix M. If M_(t) is nonsingular, thenthe above set of equations can be solved using Cramer's rule to obtain##EQU16## where Δ_(tt) is the non-zero determinant of matrix M_(t) andΔ_(tm) denotes the determinant of the matrix obtained by replacing them^(th) column in matrix M_(t) by negative of the last column of thesyndrome matrix M for each m=0, 1, . . . , t-1.

If matrix M_(t) is singular, (i.e., Δ_(tt) is 0) then Equation 5B is adependent set which implies that there are fewer than t errors. In thatcase, τ_(t) is 0. We can delete τ_(t) and last row and last column ofthe syndrome matrix in 6B. The resulting matrix equation corresponds tothat for t-1 errors. This process is repeated if necessary so that thefinal matrix equation corresponds to that for v errors and M isnonsingular. Then we need the set of determinants Δ_(vm) where M=0, 1, .. . , v.

It can be easily seen that Δ_(vm) for v=t-1 is a cofactor of Δ_(tt)corresponding to the (m-1)^(st) column and t^(th) row in matrix M_(t).We can express Δ_(tt) in terms of these cofactors: ##EQU17##

Thus the values Δ_(vm) for v=t-1 need not require separate computations.They are available as byproduct of the computation for Δ_(tt). In fact,Δ_(vm) for subsequent smaller values of v are all available asbyproducts of the computation for Δ_(tt) through the hierarchicalrelationships of lower order cofactors. Thus, in case of fewer errors,the decoder finds Δ_(tt) =0 and automatically back tracks into priorcomputations to the correct value for v and uses the already computedcofactors Δ_(vm). This is illustrated previously through hardwareimplmentation of the case t=3.

In order to accomodate the special cases of all fewer errors, we willreplace Equation 7B by a more convenient general form ##EQU18## where vis determined from the fact that Δ_(mm) =0 for all m>v and Δ_(vv) ≠0;and Δ_(m) is defined with the new notation as ##EQU19##

Since τ₀ =1, one can determine τ_(m) for all values of m using Equation(9). However, we will see that the coefficients τ_(m) are not needed inthe entire decoding process. To this end, we obtain a modified errorlocator equation from Equations (4) and (9) as given by ##EQU20## Theerror location values iε{I} are the set of v unique values of i whichsatisfy Equation (11B).

While the invention has been particularly shown and described withreference to a preferred embodiment thereof, it will be understood bythose skilled in the art that various other changes in the form anddetails may be made therein without departing from the spirit and scopeof the invention.

Having thus described my invention, what I claim as new and desire tosecure by Letters Patent is:
 1. In an apparatus for processing syndromebytes in a multibyte error correcting system of the type wherein eachcharacter is represented by a byte consisting of a unique combination of"b" binary bits, and write check bytes are generated as data is beingwritten on a storage medium, and read check bytes are generated when thedata is read from the storage medium, and the apparatus is operable tocorrect up to t errors in a selected codeword containing up to 2^(b)character positions by processing 2t syndrome bytes, each containing "b"bits which were generated by combining write check bytes and read checkbytes that correspond to the modulo 2 sum of bit positions of saidcodeword that were selected systematically in accordance with a paritycheck matrix reflecting the roots α^(a), α^(a+1), α^(a+2), . . . ,α^(a+2t-1) of a generator polynomial where α is an element of the finitefield of 2^(b) elements, the combination comprising:(1) syndromegenerating means for generating 2t syndrome bytes from said selectedcodeword as it is read from the storage medium; and (2) circuit meansresponsive to said 2t syndrome bytes for developing t+1 coefficients Δfor an error locator polynomial corresponding to said selected codeword,said circuit means being characterized by logic means responsive topredetermined combinations of said syndrome bytes to produce cofactorscorresponding to coefficients Δ of the error locator polynomial whenless than t errors occur, and combining circuitry for selectivelycombining said cofactor signal when t errors occur.
 2. The combinationrecited in claim 1 in which said logic means for producing saidcofactors comprises a plurality of product blocks each of which isoperable to multiply two "b" bit vector input signals to provide aproduct output signal.
 3. The combination recited in claim 2 in whichsaid logic means further includes means comprising a plurality ofexclusive-OR gates for combining selected said product output signals toproduce said cofactors.
 4. The combination recited in claim 2 includingmeans for connecting the output of said syndrome generating means toselected said product blocks.
 5. The combination recited in claim 3 inwhich said combining means comprises another plurality of said productblocks and means for supplying selected said cofactors and selected saidsyndromes to said another plurality of said product blocks to provide asecond set of product output signals.
 6. The combination recited inclaim 5 including another plurality of exlusive-OR gates for combiningselected ones of said second set of product output signals to produce aset of t+1 error parameter signals.
 7. The combination recited in claim6 further including logic means for selecting either said t+1 errorparameter signals for said error coefficients or said cofactors for saidcoefficients in accordance with the number of errors in said codeword.8. The combination recited in claim 1 in which "b" is
 8. 9. Thecombination recited in claim 1 in which said circuit means isimplemented in integrated circuit technology to correct t errorsemploying 2t syndrome bytes.
 10. The combination recited in claim 1 inwhich said syndrome generating means generates 2(t-x) syndrome bytes andsaid circuit means corrects up to (t-x) errors.
 11. A method forprocessing syndrome bytes in a multibyte error correcting systemoperable to detect up to t errors in a selected codeword containing upto 2^(b) character positions, where each character is represented by abyte consisting of a unique combination of "b" binary bits, byprocessing 2t syndrome bytes, each containing "b" bits which weregenerated by combining write check bytes and read check bytes generatedrespectively when data is written into and read from a storage medium,said check bytes corresponding to the modulo 2 sum of bit positions ofsaid codeword that were selected systematically in accordance with aparity check matrix reflecting the roots α^(a), α^(a+1), α^(a+2), . . ., α^(a+2t-1) of a generator polynomial where α is an element of thefinite field of 2^(b) elements, the method comprising the steps of:(1)generating 2t syndrome bytes by reading said selected codeword; and (2)developing t+1 coefficients Δ for an error locator polynomialcorresponding to said selected codeword by logically combiningpredetermined combinations of said syndrome bytes to produce cofactorscorresponding to coefficients Δ of the error locator polynomial whenless than t errors occur, and selectively combining said cofactor byteswith selected syndromes when t errors occur to provide said t+1coefficients.
 12. The method recited in claim 11 in which said step ofdeveloping includes multiplying pairs of selected syndromes as "b" bitvectors to produce a plurality of product output signals andexclusive-ORing selected pairs of said product output signals to producesaid cofactors.
 13. The method recited in claim 12 further includingmultiplying each said cofactor with a different preselected syndromebyte as "b" bit vectors to produce a second set of product outputsignals and exlusive-ORing selected pairs of said second plurality ofproduct output signals to provide error parameter signals correspondingto said coefficients when t errors are present.
 14. The method recitedin claim 13 further including the step of examining a selected errorparameter signal to determine if t errors has occurred in said codeword.15. The method recited in claim 14 in which a cofactor signal is alsoexamined if less than t errors has occurred.
 16. Circuit means forprocessing syndromes from a multibytes error correcting system operableto correct up to t errors in a selected codeword containing up to 2^(b)character positions, where each character is represented by a byteconsisting of a unique combination of "b" binary bits, by processing 2tsyndrome bytes, each containing "b" bits which were generated bycombining write check bytes and read check bytes generated respectivelyduring writing of data onto and reading of data from a storage medium,and which check bytes correspond to the modulo 2 sum of bit positions ofsaid codeword that were selected systematically in accordance with aparity check matrix reflecting the roots α^(a), α^(a+1), α^(a+2), . . ., α^(a+2t-1) of a generator polynomial where α is an element of thefinite field of 2^(b) elements, said circuit means responsive to said 2tsyndrome bytes for developing t+1 coefficients Δ for a error locatorpolynomial corresponding to the selected codeword, said circuit meansbeing characterized by logic means responsive to predeterminedcombinations of said syndrome bytes to produce cofactors correspondingto coefficients Δ of the error locator polynomial when less than terrors occur, and combining circuitry for selectively combining saidcofactor signals when all t errors occur to produce said t+1coefficients.